﻿// 3604. 最小年龄的3个职工.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>


using namespace std;
/*
https://www.acwing.com/problem/content/3607/


给定每个职工的职工号，姓名，年龄信息，将职工们按照年龄从小到大进行排序，年龄相同则按工号从小到大排序，工号也相同则按姓名字典序排序。
排好序后，输出前三个人的信息，不足三人则输出所有人信息。

输入格式
第一行包含一个整数 N。

接下来 N行，每行包含一个职工信息，包括职工号，姓名，年龄。

输出格式
输出结果行数为 N 和 3的较小值。

按照输入格式，每行输出一个人的信息。

数据范围
1≤N≤30
,
职工号范围 [1,1000]
，
姓名为一个长度不超过 10 的字母构成的字符串。年龄范围 [1,100]。

输入样例：
5
501 Jack 6
102 Nathon 100
599 Lily 79
923 Lucy 15
814 Mickle 65
输出样例：
501 Jack 6
923 Lucy 15
814 Mickle 65
*/

const int N = 50;
struct STUDENT {
	string name;
	int age;
	int id;
}student[N];

int n;


bool cmp(const struct STUDENT& a, const struct STUDENT& b) {
	if (a.age < b.age) return true;
	else if (a.age == b.age) {
		if (a.id < b.id) {
			return true;
		}
		else if (a.id == b.id) {
			if (a.name < b.name) {
				return true;
			}
		}
	}

	return false;
}



int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> student[i].id >> student[i].name >> student[i].age;
	}

	sort(student,student+n,cmp);

	n = min(n, 3);
	for (int i = 0; i < n; i++) {
		cout << student[i].id << " " << student[i].name << " " << student[i].age << endl;
	}
	return 0;
}

 